package shape

import (
	"errors"
	"fmt"
)

// Triangle 三角形构造体
type Triangle struct {
	base   float64 // 底
	height float64 // 高度
}

// NewTriangle 创建一个三角形实例
func NewTriangle(base float64, height float64) (*Triangle, error) {
	if base <= 0 || height <= 0 {
		return nil, errors.New("base and height must be greater than 0")
	}
	return &Triangle{base: base, height: height}, nil
}

// String 方法将 Triangle 对象转换为字符串表示形式。
func (triangle *Triangle) String() string {
	return fmt.Sprintf("Triangle: {base: %v, height: %v, area: %v}", triangle.base, triangle.height, triangle.Area())
}

// Base TriangleBase 返回三角形的底
func (triangle *Triangle) Base() float64 {
	return triangle.base
}

// SetBase TriangleBase 设置三角形的底
func (triangle *Triangle) SetBase(base float64) {
	triangle.base = base
}

// Height 返回三角形的高度
func (triangle *Triangle) Height() float64 {
	return triangle.height
}

// SetHeight 设置三角形的高度
func (triangle *Triangle) SetHeight(height float64) {
	triangle.height = height
}

// Area 三角形求面积
func (triangle *Triangle) Area() float64 {
	return triangle.base * triangle.height / 2
}
